home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 25 / CU Amiga Magazine's Super CD-ROM 25 (1998)(EMAP Images)(GB)(Track 1 of 2)[!][issue 1998-08].iso / CUCD / Programming / QuakeTools / src / util / qbsp.c < prev    next >
Encoding:
C/C++ Source or Header  |  1998-06-11  |  3.9 KB  |  163 lines

  1. #define    LIBQTOOLS_CORE
  2. #define    LIBQBUILD_CORE
  3. #include <libqtools.h>
  4. #include <libqbuild.h>
  5.  
  6. struct memory bspStatic;
  7. struct memory *bspMem = &bspStatic;
  8.  
  9. extern char *argv0;
  10. extern char bspfilename[NAMELEN_PATH];
  11. extern char pointfilename[NAMELEN_PATH];
  12. extern char portfilename[NAMELEN_PATH];
  13. extern char hullfilename[NAMELEN_PATH];
  14.  
  15. extern void CreateHulls(__memBase);
  16. extern void ReadClipHull(__memBase, register int hullnum);
  17. extern void UpdateEntLump(__memBase);
  18.  
  19. extern bool drawflag;
  20.  
  21. /*
  22.  * =================
  23.  * ProcessFile
  24.  * 
  25.  * =================
  26.  */
  27. static void ProcessFile(register char *sourcebase, register char *bspfilename1)
  28. {
  29.   char *mapBuf;
  30.   FILE *bspFile;
  31.  
  32. // create filenames
  33.   strcpy(bspfilename, bspfilename1);
  34.   ReplaceExt(bspfilename, "bsp");
  35.  
  36.   strcpy(hullfilename, bspfilename1);
  37.   ReplaceExt(hullfilename, "h0");
  38.  
  39.   strcpy(portfilename, bspfilename1);
  40.   ReplaceExt(portfilename, "prt");
  41.  
  42.   strcpy(pointfilename, bspfilename1);
  43.   ReplaceExt(pointfilename, "pts");
  44.  
  45.   if(!(bspMem->bspOptions & QBSP_ONLYENTS)) {
  46.     remove(bspfilename);
  47.     if(!(bspMem->bspOptions & QBSP_USEHULLS)) {
  48.       hullfilename[strlen(hullfilename) - 1] = '1';
  49.       remove(hullfilename);
  50.       hullfilename[strlen(hullfilename) - 1] = '2';
  51.       remove(hullfilename);
  52.     }
  53.     remove(portfilename);
  54.     remove(pointfilename);
  55.   }
  56.  
  57. // init the tables to be shared by all models
  58.   BeginBSPFile(bspMem);
  59.  
  60. // load brushes and bspMem->mapentities
  61.   mapBuf = (char *)GetVoid(sourcebase);
  62.   LoadMapFile(bspMem, mapBuf);
  63.   tfree(mapBuf);
  64.  
  65.   if (bspMem->bspOptions & QBSP_ONLYENTS) {
  66.     UpdateEntLump(bspMem);
  67.     return;
  68.   }
  69.  
  70. // the clipping hulls will be written out to text files by forked processes
  71.   CreateHulls(bspMem);
  72.  
  73.   ReadClipHull(bspMem, 1);
  74.   ReadClipHull(bspMem, 2);
  75.  
  76.   WriteEntitiesToString(bspMem);
  77.   
  78.   bspFile = fopen(bspfilename, "wb");
  79.   FinishBSPFile(bspMem, bspFile);
  80.   fclose(bspFile);
  81.  
  82.   FreeClusters(bspMem, 0);
  83. }
  84.  
  85. /*
  86.  * ==================
  87.  * main
  88.  * 
  89.  * ==================
  90.  */
  91. int main(int argc, char **argv)
  92. {
  93.   int i;
  94.   char sourcename[NAMELEN_PATH];
  95.   char destname[NAMELEN_PATH];
  96.  
  97.   memset(bspMem, 0, sizeof(struct memory));
  98.   if (!setjmp(eabort)) {
  99.     //
  100.     // check command line flags
  101.     //
  102.     for (i = 1; i < argc; i++) {
  103.       if (argv[i][0] != '-')
  104.         break;
  105.       else if (!strcmp(argv[i], "-drawGL")) {
  106.         drawflag = TRUE;
  107.         Draw_Init();
  108.       }
  109.       else if (!strcmp(argv[i], "-watervis"))
  110.         bspMem->bspOptions |= QBSP_WATERVIS;
  111.       else if (!strcmp(argv[i], "-slimevis"))
  112.         bspMem->bspOptions |= QBSP_SLIMEVIS;
  113.       else if (!strcmp(argv[i], "-notjunc"))
  114.         bspMem->bspOptions |= QBSP_NOTJUNC;
  115.       else if (!strcmp(argv[i], "-nofill"))
  116.         bspMem->bspOptions |= QBSP_NOFILL;
  117.       else if (!strcmp(argv[i], "-noclip"))
  118.         bspMem->bspOptions |= QBSP_NOCLIP;
  119.       else if (!strcmp(argv[i], "-onlyents"))
  120.         bspMem->bspOptions |= QBSP_ONLYENTS;
  121.       else if (!strcmp(argv[i], "-usehulls"))
  122.         bspMem->bspOptions |= QBSP_USEHULLS;
  123.       else if (!strcmp(argv[i], "-hullnum")) {
  124.         hullnum = atoi(argv[i + 1]);
  125.         i++;
  126.       }
  127.       else if (!strcmp(argv[i], "-subdivide")) {
  128.         subdivide_size = atoi(argv[i + 1]);
  129.         i++;
  130.       }
  131.       else
  132.         Error("qbsp: Unknown option '%s'", argv[i]);
  133.     }
  134.  
  135.     if (i != argc - 2 && i != argc - 1)
  136.       Error("usage: qbsp [options] sourcefile [destfile]\noptions: -nojunc -nofill -draw -onlyents -verbose");
  137.  
  138.     //
  139.     // let forked processes change name for ps status
  140.     //
  141.     argv0 = argv[0];
  142.  
  143.     //
  144.     // create destination name if not specified
  145.     //
  146.     strcpy(sourcename, argv[i]);
  147.     ReplaceExt(sourcename, "map");
  148.  
  149.     if (i != argc - 2) {
  150.       strcpy(destname, argv[i]);
  151.       ReplaceExt(destname, "bsp");
  152.       mprintf("    - outputfile: %s\n", destname);
  153.     }
  154.     else
  155.       strcpy(destname, argv[i + 1]);
  156.  
  157.     ProcessFile(sourcename, destname);
  158.     PrintMemory();
  159.   }
  160.  
  161.   return 0;
  162. }
  163.